<?php
/*
系统信息模型
由于系统信息广播行为特殊性，
所以使用memcache来存储用户24小时内已读的系统信息
系统信息一旦到达过期时间，则将done设为1，用户不能再读取
*/
class sysmsgsModel extends Model
{
	private $main='sysmsgs';      //系统消息主表
	//private	$read='read_sysmsgs'; //记录用户已读系统消息附表(已废弃)
	
	/*
	单条读取系统消息
	*/
	public function read($uid)
	{
		$read=$this->mem->get('sysmsgs_'.$uid);
		$rs=false;
		if($read)
		{
			$sql="select sid,content from $this->main where done=0 and sid not in(".implode(",",array_values($read)).") limit 1";
			$rs=$this->db->getRow($sql);
			if($rs)
			{
				$read[]=$rs['sid'];
				$this->mem->set('sysmsgs_'.$uid,$read,86400);
			}
		}
		else
		{
			$sql="select sid,content from $this->main where done=0 limit 1";
			$rs=$this->db->getRow($sql);
			if($rs)
			{
				$arr_sid=array();
				$arr_sid[]=$rs['sid'];
				$this->mem->set('sysmsgs_'.$uid,$arr_sid,86400);
			}
		}
		return $rs;

	}
	/*
	读取所有未过期未读信息
	*/
	public function readAll($uid)
	{
		$read=$this->mem->get('sysmsgs_'.$uid);
		
		$rs=false;
		if($read)
		{
			$sql="select sid,content from $this->main where done=0 and sid not in(".implode(",",array_values($read)).")";

			$rs=$this->db->getAll($sql);
			
			if($rs)
			{
				$arr_sid=array();
				foreach($rs as $v)
				{
					$arr_sid[]=$v['sid'];
				}
				$mem_sid=array_merge($read,$arr_sid);

				$this->mem->set('sysmsgs_'.$uid,$mem_sid,86400);
			}
			else
			{
				return false;
			}
		}
		else
		{
			$sql="select sid,content from $this->main where done=0";
			$rs=$this->db->getAll($sql);

			if($rs)
			{
				$arr_sid=array();
				foreach($rs as $v)
				{
					$arr_sid[]=$v['sid'];
				}

				$this->mem->set('sysmsgs_'.$uid,$arr_sid,86400);
			}
			else
			{
				return false;
			}
		}
		return $rs;
	}


	//获取所有未过期信息
	public function getAll()
	{
		$sql="select * from $this->main where sendtime+expiretime>".time();
		return $this->db->getAll($sql);
	}
	//判断某条系统消息用户是否已读
	public function isread($uid,$sid)
	{
		/*
		$sql="select uid from $this->read where sid=$sid";
		$rs_uid=$this->db->getOne($sql);
		if($rs_uid==$uid)
		{
			return true;
		}
		else
		{
			return false;
		}
		*/
		//获取memcache中已读条目
		$uid='sysmsg_'.$uid;
		$read=$this->mem->get($uid);
		if($read)
		{
			if(in_array($read,$sid))
			{
				return true;
			}
			else
			{
				return false;
			}
		}
		else
		{
			return false;
		}
	}

	//判断系统消息是否已经过期
	/*
		表中有sendtime发送时间
			  expire 过期秒数
			  如果现在的时间戳>exipiretime+sendtime
			  则消息已经过期
	*/
	public function isexpire($sid)
	{
		$sql="select sendtime,expiretime from$this->main where sid=$sid";
		$row=$this->db->getRow($sql);
		if($row)
		{
			if(time()>($row['sendtime']+$row['expire']))
			{
				return true;
			}
			else
			{
				return false;
			}
		}
		else
		{
			return false;
		}
	}
	
	/*
	设置系统消息已过期，不再发送
	*/
	public function setDone($sid)
	{
		$sql="update $this->main set done=0 where sid=$sid";
		if($this->db->set_query($sql))
		{
			return $this->db->affect_row();
		}
		else
		{
			return false;
		}
	}
	
}